package interfaceGrafica;

import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.MouseEvent;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

@SuppressWarnings("serial")
public abstract class PainelJogo extends JLayeredPane {

	protected Janela janela;
	protected MenuPrincipal menuPrincipal;
	protected JTextField translation;
	protected JLabel background;

	protected JLabel drop1;
	protected JLabel drop2;
	protected JLabel drop3;

	protected JButton clear;
	protected JButton confirm;
	protected JButton next;
	protected JButton home;
	protected JButton exit;

	protected ImageIcon backgroundImagem;
	protected ImageIcon quadroImagem;
	protected ImageIcon dropImagem;
	protected ImageIcon clearImagem1;
	protected ImageIcon clearImagem2;
	protected ImageIcon clearImagem3;
	protected ImageIcon confirmImagem1;
	protected ImageIcon confirmImagem2;
	protected ImageIcon confirmImagem3;
	protected ImageIcon nextImagem1;
	protected ImageIcon nextImagem2;
	protected ImageIcon nextImagem3;
	protected ImageIcon homeImagem1;
	protected ImageIcon homeImagem2;
	protected ImageIcon homeImagem3;
	protected ImageIcon exitImagem1;
	protected ImageIcon exitImagem2;
	protected ImageIcon exitImagem3;

	protected int x, y;

	public PainelJogo(Janela janela, MenuPrincipal menuPrincipal) {
		this.janela = janela;
		this.menuPrincipal = menuPrincipal;

		quadroImagem = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\quadroImagem.png");
		dropImagem = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\dropImagem.png");
		clearImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\clearImagem1.png");
		clearImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\clearImagem2.png");
		clearImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\clearImagem3.png");
		confirmImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\confirmImagem1.png");
		confirmImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\confirmImagem2.png");
		confirmImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\confirmImagem3.png");
		nextImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\nextImagem1.png");
		nextImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\nextImagem2.png");
		nextImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\nextImagem3.png");
		homeImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\homeImagem1.png");
		homeImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\homeImagem2.png");
		homeImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\homeImagem3.png");
		exitImagem1 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\exitImagem1.png");
		exitImagem2 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\exitImagem2.png");
		exitImagem3 = new ImageIcon(
				"Data\\Imagens\\TreinamentoDesafio\\exitImagem3.png");

		this.background = new JLabel();
		this.background.setBounds(0, 0, 800, 600);
		super.add(background, JLayeredPane.DEFAULT_LAYER);

		drop1 = new JLabel();
		inicializarDrop(this, drop1, dropImagem, 423, 101,
				dropImagem.getIconWidth(), dropImagem.getIconHeight());

		drop2 = new JLabel();
		inicializarDrop(this, drop2, dropImagem, 542, 101,
				dropImagem.getIconWidth(), dropImagem.getIconHeight());

		drop3 = new JLabel();
		inicializarDrop(this, drop3, dropImagem, 666, 101,
				dropImagem.getIconWidth(), dropImagem.getIconHeight());
	}

	protected void mouseArrastar(JLabel rotulo, MouseEvent evt) {
		if (!rotulo.isEnabled())
			return;
		rotulo.setLocation(
				(evt.getX() + rotulo.getLocation().x) - (rotulo.getWidth() / 2),
				(evt.getY() + rotulo.getLocation().y)
						- (rotulo.getHeight() / 2));
	}

	protected void mouseSoltar(JLabel rotulo) {
		if (!rotulo.isEnabled())
			return;
		if ((rotulo.getLocation().x < drop1.getLocation().x + 60 && rotulo
				.getLocation().x >= drop1.getLocation().x - 100)
				&& (rotulo.getLocation().y < drop1.getLocation().y + 100 && drop1
						.getLocation().y >= drop1.getLocation().y - 100)) {
			drop1.setText(rotulo.getText());
			new Som("Data\\Sons\\BLOOP.wav");
		} else {
			if ((rotulo.getLocation().x < drop2.getLocation().x + 60 && rotulo
					.getLocation().x >= drop2.getLocation().x - 60)
					&& (rotulo.getLocation().y < drop2.getLocation().y + 100 && rotulo
							.getLocation().y >= drop2.getLocation().y - 100)) {
				drop2.setText(rotulo.getText());
				new Som("Data\\Sons\\BLOOP.wav");
			} else {
				if ((rotulo.getLocation().x < drop3.getLocation().x + 100 && rotulo
						.getLocation().x >= drop3.getLocation().x - 60)
						&& (rotulo.getLocation().y < drop3.getLocation().y + 100 && rotulo
								.getLocation().y >= drop3.getLocation().y - 100)) {
					drop3.setText(rotulo.getText());
					new Som("Data\\Sons\\BLOOP.wav");
				}

			}
		}
		rotulo.setLocation(x, y);
	}

	protected void mousePressionar(JLabel rotulo) {
		if (!rotulo.isEnabled())
			return;
		this.moveToFront(rotulo);
		x = rotulo.getLocation().x;
		y = rotulo.getLocation().y;

	}

	public static void inicializarQuadroEDrop(JLabel rotulo,
			ImageIcon iconePadrao, int x, int y, int largura, int altura)
	{
		rotulo.setDisabledIcon(iconePadrao);
		rotulo.setFont(new Font("Arial", 1, 16));
		rotulo.setIcon(iconePadrao);
		rotulo.setHorizontalAlignment(SwingConstants.CENTER);
		rotulo.setVerticalAlignment(SwingConstants.CENTER);
		rotulo.setHorizontalTextPosition(SwingConstants.CENTER);
		rotulo.setVerticalTextPosition(SwingConstants.CENTER);
		rotulo.setBorder(null);
		rotulo.setDoubleBuffered(true);
		rotulo.setBounds(x, y, largura, altura);;
	}
	
	public static void inicializarDrop(JLayeredPane painel, JLabel rotulo,
			ImageIcon iconePadrao, int x, int y, int largura, int altura) {
		inicializarQuadroEDrop(rotulo, iconePadrao, x, y, largura, altura);
		rotulo.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
		painel.add(rotulo, JLayeredPane.PALETTE_LAYER);
	}

	public static void inicializarQuadro(JLayeredPane painel, JLabel rotulo,
			ImageIcon iconePadrao, int x, int y, int largura, int altura) {
		inicializarQuadroEDrop(rotulo, iconePadrao, x, y, largura, altura);
		rotulo.setCursor(new Cursor(Cursor.HAND_CURSOR));
		painel.add(rotulo, JLayeredPane.DRAG_LAYER);
	}

	public abstract void iniciarJogada();

}
